package Hot100;

import java.util.Arrays;
import java.util.HashMap;

/**
 * @author zhangmin
 * @create 2022-01-14 15:14
 */
public class subarraySum560 {
    /**
     * 560. 和为 K 的子数组
     * 给你一个整数数组 nums 和一个整数 k ，请你统计并返回该数组中和为 k 的连续子数组的个数。
     * 前缀和，用map记录前缀和出现的次数
     * */
    public int subarraySum(int[] nums, int k) {
        int n=nums.length;
        HashMap<Integer,Integer> map=new HashMap<>();
        map.put(0,1);
        int res=0,sum=0;
        for (int i = 0; i < n; i++) {
            sum+=nums[i];
            int sum_j=sum-k;
            if (map.containsKey(sum_j)){
                res+=map.get(sum_j);
            }
            map.put(sum,map.getOrDefault(sum,0)+1);
        }
        return res;
    }
}
